package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.sql.PseudoColumnUsage;
import java.util.UUID;

/**
 * @author vivi
 * @description
 * @date 2024/6/4
 */
public class PasswordUtils {
    // 1 加盐并生成密码
    public static String encrypt(String password) {
        // 盐值 -- 32位
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 生成加盐之后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 生成最终密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }
    // 2 生成加盐密码 -- 1的重载
    public static String encrypt(String password, String salt) {
        // 生成一个加盐后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 生成最终的密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }
    // 3 验证密码
    public static boolean check(String inputPassword, String finalPassword) {
        if (StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword) &&
                finalPassword.length() == 65) {
            // 1 得到盐值
            String salt = finalPassword.split("\\$")[0];
            // 2 使用之前的加密步骤 将 明文密码 和 已经得到的盐值 进行加密，生成最终的密码
            String comfirmPassword = PasswordUtils.encrypt(inputPassword, salt);
            // 3 对比是否相同
            return comfirmPassword.equals(finalPassword);
        }
        return false;
    }

    public static void main (String[] args) {
        String password = "123456";
        System.out.println("加密前：" + password);
        String finalPassword = PasswordUtils.encrypt(password);
        System.out.println("加密后：" + finalPassword);
        System.out.println("盐：" + finalPassword.split("$")[0]);
        String password2 = "123456";
        System.out.println(PasswordUtils.check(password,finalPassword));
    }
}




























